home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1985-09-02 | 13.0 KB | 247 lines
10 '-------------------------------------------------------------------------- 11 '|<UNK! {0009}>UASM-STR 1.12<UNK! {0009}><UNK! {0009}>20 Nov., 1983<UNK! {0009}><UNK! {0009}>White Crane Systems | 12 '|<UNK! {0009}>copyright 1983<UNK! {0009}><UNK! {0009}>Guy C. Gordon<UNK! {0009}><UNK! {0009}>3194 Friar Tuck Way | 13 '|<UNK! {0009}> <UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>Doraville, GA 30340 | 14 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}> | 16 '|<UNK! {0009}>This program takes the Unassemble output from UASM-INT and puts in | 18 '|<UNK! {0009}>the strings printed with DOSCALL PRINT$ (hex 09) and appends to the | 20 '|<UNK! {0009}>output file, (.STR) the assembler data definitions (DB insructions) | 22 '|<UNK! {0009}>that are needed to create the strings. You may also enter up to | 30 '|<UNK! {0009}>20 address ranges (from DEBUG) and the program will find all strings | 32 '|<UNK! {0009}>within that range and append them also. The program will also try | 34 '|<UNK! {0009}>to find variables referenced by a hex address in brackets [hhhh], | 36 '|<UNK! {0009}>and FCB's referenced in file I/O DOSCALL's.<UNK! {0009}><UNK! {0009}><UNK! {0009}> | 44 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}> | 46 '|<UNK! {0009}>Due to the large amount of disk I/O, this program will run fastest | 48 '|<UNK! {0009}>with the input and output files on a RAM drive. If you must put | 49 '|<UNK! {0009}>both files on floppies, specify separate drives for input & output. | 50 '********************************* NOTICE ********************************* 51 '* USER SUPPORTED SOFTWARE (With thanks to Andrew Flugelman) * 52 '* * 53 '* A limited license is granted to all users of this program, to make * 54 '* copies of this program and distribute them to other users subject * 55 '* to the following conditions: * 56 '* 1. None of the notices or credits are to be bypassed, * 57 '* altered, or removed. * 58 '* 2. The program is not to be distributed in modified form. * 59 '* (Users are encouraged to distribute MERGE files.) * 60 '* 3. No fee is to be charged (or any other consideration * 61 '* received) for copying or distributing the program * 62 '* without an express written agreement with * 63 '* White Crane Systems. * 64 '************************************************************************** 70 CLS 'PRINT CHR$(27)+"E"; <UNK! {0009}>'CLS for IBM, ESC E for Victor 9000 71 PRINT " UASM-STR 72 PRINT " White Crane Systems Unassembler - String Module 73 PRINT " 74 PRINT " If you are using this program and finding it of value 75 PRINT " please send a cash contribution to support its upkeep and 76 PRINT " distribution. Use the UASM system of programs to unas- 77 PRINT " semble one average length .COM file, look over the results 78 PRINT " and calculate how many hours this would have taken you to 79 PRINT " to produce, multiply by the minimum wage, contribute that 80 PRINT " amount and use the programs free thereafter. If that's too 81 PRINT " much just send $20. Supporters will receive free notice 82 PRINT " of enhancements and updates. 83 PRINT " In any case you are encouraged to copy and distribute 84 PRINT " UASM to your friends provided you do so free of charge and 85 PRINT " in unmodified form. 87 PRINT " 88 PRINT " Guy C. Gordon 89 PRINT " White Crane Systems 90 PRINT " 3194 Friar Tuck Way 91 PRINT " Doraville, GA 30340 92 PRINT " 110 <UNK! {0009}>DEFINT A-Z 120 <UNK! {0009}>MAXS=500: MAXA=20: DIM LIN$(500), S$(500), AA$(20), AZ$(20) 130 <UNK! {0009}>TRUE=(1=1): FALSE=NOT TRUE: D$=" ": MAXB=200 140 <UNK! {0009}>CR$=CHR$(13): LF$=CHR$(10): TAB$=CHR$(9): ESC$=CHR$(27): Q$="'" 150 <UNK! {0009}>DEF FNA=(MID$(D$,1,1)<"0" OR MID$(D$,1,1)>"F" OR MID$(D$,2,1)<"0" OR MID$(D$,2,1)>"F" OR MID$(D$,3,1)<"0" OR MID$(D$,3,1)>"F" OR MID$(D$,4,1)<"0" OR MID$(D$,4,1)>"F") 160 <UNK! {0009}>PRINT 170 <UNK! {0009}>INPUT "Enter name of input file [.INT]: ",INFILE$ 180 <UNK! {0009}> DR=INSTR(INFILE$,":"): EXT=INSTR(INFILE$,".") 190 <UNK! {0009}> IF EXT=0 THEN INFILE$=INFILE$+".INT": EXT=INSTR(INFILE$,".") 200 <UNK! {0009}> ID$=MID$(INFILE$,DR+1,EXT-DR-1) 210 <UNK! {0009}>PRINT "Enter name of output file ["ID$;: INPUT ".STR]: ",OUTFILE$ 220 <UNK! {0009}> IF INSTR(OUTFILE$,":")=LEN(OUTFILE$) THEN OUTFILE$=OUTFILE$+ID$ 230 <UNK! {0009}> IF INSTR(OUTFILE$,".")=0 THEN OUTFILE$=OUTFILE$+".STR" 240 <UNK! {0009}>PRINT "Enter name of oiginal binary file ["ID$;:INPUT ".COM]: ",BINFILE$ 250 <UNK! {0009}> IF INSTR(BINFILE$,":")=LEN(BINFILE$) THEN BINFILE$=BINFILE$+ID$ 260 <UNK! {0009}> IF INSTR(BINFILE$,".")=0 THEN BINFILE$=BINFILE$+".COM" 300 '------------------------------------------------------------------------- 301 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>OPEN BINARY FILE & READ STRINGS<UNK! {0009}><UNK! {0009}> | 302 '------------------------------------------------------------------------- 310 <UNK! {0009}>PRINT: PRINT TIME$,"Reading "BINFILE$: PRINT 315 <UNK! {0009}>OPEN BINFILE$ FOR INPUT AS #3: CLOSE #3<UNK! {0009}><UNK! {0009}>'Make sure it's there 320 <UNK! {0009}>OPEN "R",#3,BINFILE$,1: FIELD #3, 1 AS N$ 325 <UNK! {0009}>'<UNK! {0009}><UNK! {0009}>This open statement limits the .COM file to 32K 330 <UNK! {0009}>PRINT "Enter String Area addresses from DEBUG. End list with a blank line." 340 <UNK! {0009}>PRINT "hhhh kkkk (range) or hhhh (single string address) or hhhh Ln (length)" 350 <UNK! {0009}>FOR I=1 TO MAXA: LINE INPUT A$ 352 <UNK! {0009}> BE=INSTR(A$,"-"): IF BE=0 THEN BE=INSTR(A$," "): IF BE=0 THEN BE=INSTR(A$,",") 354 <UNK! {0009}> IF BE=0 THEN BE=LEN(A$)+1: IF BE<=1 THEN 400 360 <UNK! {0009}> AA$(I)=LEFT$(A$,BE-1): AZ$(I)=MID$(A$,BE+1) 370 <UNK! {0009}> IF AZ$(I)="" THEN AZ$(I)=AA$(I) 380 <UNK! {0009}>NEXT I 400 '------------------------------------------------------------------------- 401 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>LOOP THROUGH ADDRESS RANGES<UNK! {0009}><UNK! {0009}> | 402 '-------------------------------------------------------------------------<UNK! {0009}> 410 <UNK! {0009}>FOR K=1 TO MAXA: IF AA$(K)="" THEN 500 420 <UNK! {0009}> START=VAL("&H"+AA$(K)): IF START<&H100 THEN 490 425 <UNK! {0009}> IF LEFT$(AZ$(K),1)="l" OR LEFT$(AZ$(K),1)="L" THEN MAXB=VAL("&H"+MID$(AZ$(K),2)): AZ=MAXB+START ELSE AZ=VAL("&H"+AZ$(K)): MAXB=200 430 <UNK! {0009}> IF START>AZ THEN 490 440 <UNK! {0009}> GOSUB 1200<UNK! {0009}><UNK! {0009}><UNK! {0009}>'Get string up to $ terminator 450 <UNK! {0009}> IF START<&H1000 THEN LIN$(L)="0"+HEX$(START) ELSE LIN$(L)=HEX$(START) 460 <UNK! {0009}> PRINT "D";LIN$(L);TAB$;"DB";TAB$;S$(L) 470 <UNK! {0009}> START=I+&H100 480 <UNK! {0009}> GOTO 430<UNK! {0009}> <UNK! {0009}> 490 <UNK! {0009}>NEXT K 500 '------------------------------------------------------------------------ 501 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}> OPEN FILES<UNK! {0009}><UNK! {0009}><UNK! {0009}> | 502 '------------------------------------------------------------------------ 510 <UNK! {0009}>PRINT: PRINT TIME$,"Reading "INFILE$ 520 <UNK! {0009}>PRINT ,"Writing "OUTFILE$: PRINT 530 <UNK! {0009}>OPEN INFILE$ FOR INPUT AS #1 540 <UNK! {0009}>OPEN OUTFILE$ FOR OUTPUT AS #2 600 '------------------------------------------------------------------------ 601 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}> MAIN LOOP<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}> | 602 '------------------------------------------------------------------------ 610 <UNK! {0009}>LINE INPUT #1,A$ 620 <UNK! {0009}>FOUND=FALSE 630 <UNK! {0009}> IF MID$(A$,9,6)="PRINT$" THEN GOSUB 1000<UNK! {0009}>'Get String 635 <UNK! {0009}><UNK! {0009}>IF FOUND=TRUE THEN 680 640 <UNK! {0009}> IF MID$(A$,1,7)="DOSCALL" THEN GOSUB 2000<UNK! {0009}>'Check for file I/O 645 <UNK! {0009}><UNK! {0009}>IF FOUND=TRUE THEN 680 650 <UNK! {0009}> IF INSTR(A$,"[") THEN GOSUB 3000<UNK! {0009}><UNK! {0009}>'Get Variable 655 <UNK! {0009}><UNK! {0009}>IF FOUND=TRUE THEN 680 660 <UNK! {0009}> IF MID$(A$,9,3)="MOV" THEN GOSUB 5000<UNK! {0009}><UNK! {0009}>'Check for address 665 <UNK! {0009}><UNK! {0009}>IF FOUND=TRUE THEN 680 670 <UNK! {0009}>PRINT #2, A$: GOTO 690<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>'none found 680 <UNK! {0009}>PRINT "D";D$;TAB$;"DB";TAB$;S$(I)<UNK! {0009}><UNK! {0009}>'yes, found one 690 <UNK! {0009}>IF NOT EOF(1) THEN 600 800 '------------------------------------------------------------------------ 801 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>WRITE DB STRINGS TO OUTFILE<UNK! {0009}><UNK! {0009}> | 802 '------------------------------------------------------------------------ 810 <UNK! {0009}>PRINT #2, ";END CODE" 820 <UNK! {0009}>PRINT #2, ".RADIX<UNK! {0009}>16" 830 <UNK! {0009}>PRINT #2, "CR<UNK! {0009}>EQU<UNK! {0009}>0D" 840 <UNK! {0009}>PRINT #2, "LF<UNK! {0009}>EQU<UNK! {0009}>0A" 850 <UNK! {0009}>PRINT #2, "TAB<UNK! {0009}>EQU<UNK! {0009}>09" 860 <UNK! {0009}>PRINT #2, "ESC<UNK! {0009}>EQU<UNK! {0009}>1B" 870 <UNK! {0009}>PRINT #2, "$<UNK! {0009}>EQU<UNK! {0009}>24" 900 <UNK! {0009}>'<UNK! {0009}><UNK! {0009}><UNK! {0009}>LOOP THROUGH SAVED STRINGS 910 <UNK! {0009}>FOR I=1 TO L: PRINT #2, "D";LIN$(I);TAB$;"DB";TAB$;S$(I): NEXT 920 <UNK! {0009}>' 930 <UNK! {0009}>PRINT: PRINT TIME$,"UASM-STR Complete" 999 <UNK! {0009}>END 1000 '------------------------------------------------------------------------ 1001 '<UNK! {0009}><UNK! {0009}><UNK! {0009}>GET ADDRESS FROM DOSCALL PRINT$<UNK! {0009}><UNK! {0009}><UNK! {0009}> | 1002 '------------------------------------------------------------------------ 1010 <UNK! {0009}>LSET D$=MID$(A$,21,4): IF FNA THEN RETURN 1020 <UNK! {0009}>START=VAL("&H"+D$): IF START<&H100 THEN RETURN<UNK! {0009}>'get string addr 1030 <UNK! {0009}><UNK! {0009}>'Check for duplicates that are not variables (2 bytes) 1040 <UNK! {0009}>FOR I=1 TO L: IF ((LIN$(I)=D$) AND (LEN(S$(I))>7)) THEN 1070 ELSE NEXT 1050 <UNK! {0009}>MAXB=200: GOSUB 1200: LIN$(L)=D$: I=L <UNK! {0009}>'get string 1070 <UNK! {0009}>FOUND=TRUE 1080 <UNK! {0009}>PRINT #2, LEFT$(A$,14);",D";D$;TAB$;";";S$(I) 1090 <UNK! {0009}>RETURN 1200 '----------------------------------------------------------------------- 1201 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>GET STRING FROM BINARY FILE<UNK! {0009}><UNK! {0009}> | 1202 '----------------------------------------------------------------------- 1210 <UNK! {0009}>INSTRING=FALSE: STR.ERROR=FALSE 1220 <UNK! {0009}>L=L+1 <UNK! {0009}><UNK! {0009}><UNK! {0009}>'New string 1230 <UNK! {0009}>I=START-&H100 <UNK! {0009}><UNK! {0009}>'adjust for 100h program prefix 1240 <UNK! {0009}>WHILE LEN(S$(L))<110 : I=I+1<UNK! {0009}><UNK! {0009}>'can't let string get too long 1250 <UNK! {0009}> IF I>LOF(3) THEN 1800<UNK! {0009}><UNK! {0009}><UNK! {0009}>'or run past the EOF 1260 <UNK! {0009}> GET #3, I<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>'I'th char of file.COM into N$ 1270 <UNK! {0009}> IF N$="$" THEN 1900<UNK! {0009}><UNK! {0009}><UNK! {0009}>'Found string terminator 1275 <UNK! {0009}> IF (I-START+&H100)>MAXB THEN 1920<UNK! {0009}>'Exceeded byte limit 1280 <UNK! {0009}> IF N$<" " OR N$>"~" THEN 1500<UNK! {0009}><UNK! {0009}>'non-printing character 1290 <UNK! {0009}><UNK! {0009}><UNK! {0009}>'Found characters in a string 1300 <UNK! {0009}> IF NOT INSTRING THEN S$(L)=S$(L)+Q$: INSTRING=TRUE 1320 <UNK! {0009}> S$(L)=S$(L)+N$ 1330 <UNK! {0009}> GOTO 1700<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>'Read next character 1500 '----------------------------------------------------------------------- 1501 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>NON-PRINTING CHARACTERS<UNK! {0009}><UNK! {0009}><UNK! {0009}> | 1502 '----------------------------------------------------------------------- 1510 <UNK! {0009}> IF INSTRING THEN S$(L)=S$(L)+Q$+",":INSTRING=FALSE 'Terminate string 1520 <UNK! {0009}> IF N$=CR$ THEN S$(L)=S$(L)+"CR,": GOTO 1700 1530 <UNK! {0009}> IF N$=LF$ THEN S$(L)=S$(L)+"LF,": GOTO 1700 1540 <UNK! {0009}> IF N$=TAB$ THEN S$(L)=S$(L)+"TAB,": GOTO 1700 1550 <UNK! {0009}> IF N$=ESC$ THEN S$(L)=S$(L)+"ESC,": GOTO 1700 1600 '----------------------------------------------------------------------- 1601 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}>MAKE NON-PRINTING CHAR A HEX CONSTANT<UNK! {0009}><UNK! {0009}> | 1602 '----------------------------------------------------------------------- 1610 <UNK! {0009}> IF ((ASC(N$)<&HA0) AND (ASC(N$)>&HF)) THEN S$(L)=S$(L)+HEX$(ASC(N$))+"," ELSE S$(L)=S$(L)+"0"+HEX$(ASC(N$))+"," 1700 <UNK! {0009}>WEND 1800 <UNK! {0009}>STR.ERROR=TRUE<UNK! {0009}><UNK! {0009}>'Fell through loop 1900 '----------------------------------------------------------------------- 1901 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}>TERMINATE STRING AND OUTPUT<UNK! {0009}><UNK! {0009}><UNK! {0009}> | 1902 '----------------------------------------------------------------------- 1910 <UNK! {0009}>S$(L)=S$(L)+"$" 1920 <UNK! {0009}>IF INSTRING THEN S$(L)=S$(L)+Q$: INSTRING=FALSE 1950 <UNK! {0009}>IF NOT STR.ERROR THEN RETURN 1960 <UNK! {0009}>S$(L)=S$(L)+CR$+LF$+TAB$+TAB$+TAB$+"WARNING! String terminator ($) not found" 1990 <UNK! {0009}>RETURN 2000 '------------------------------------------------------------------------ 2001 '<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>CHECK FOR FILE I/O<UNK! {0009}><UNK! {0009}><UNK! {0009}> | 2002 '------------------------------------------------------------------------ 2010 <UNK! {0009}>IF ((MID$(A$,9,4)="READ") OR (MID$(A$,9,4)="WRIT")) THEN 2100 2020 <UNK! {0009}>IF ((MID$(A$,9,4)="OPEN") OR (MID$(A$,9,4)="CLOS")) THEN 2100 2030 <UNK! {0009}>IF ((MID$(A$,9,4)="SEAR") OR (MID$(A$,9,4)="DELE")) THEN 2100 2040 <UNK! {0009}>IF ((MID$(A$,9,4)="CREA") OR (MID$(A$,9,4)="RENA")) THEN 2100 2050 <UNK! {0009}>IF ((MID$(A$,9,4)="SIZE") OR (MID$(A$,9,4)="RAND")) THEN 2100 2060 <UNK! {0009}>RETURN<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}> 2100 '------------------------------------------------------------------------ 2101 '<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>GET FCB ADDRESS<UNK! {0009}>AND STRING<UNK! {0009}><UNK! {0009}> | 2102 '------------------------------------------------------------------------ 2110 <UNK! {0009}>LSET D$=MID$(A$,21,4): IF FNA THEN RETURN 2120 <UNK! {0009}>START=VAL("&H"+D$): IF START<&H100 THEN 2500<UNK! {0009}>'get string addr 2130 <UNK! {0009}><UNK! {0009}>'Check for duplicates that are not variables (2 bytes) 2140 <UNK! {0009}>FOR I=1 TO L: IF ((LIN$(I)=D$) AND (LEN(S$(I))>7)) THEN 2200 ELSE NEXT 2150 <UNK! {0009}>XFCB=0: I=START-&H100+1: GET #3, I: IF I=&HFF THEN XFCB=7 2160 <UNK! {0009}>MAXB=36+XFCB: GOSUB 1200: LIN$(L)=D$: I=L <UNK! {0009}>'Get string 2200 '------------------------------------------------------------------------ 2201 '<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>GET FILE NAME FROM FCB & PRINT<UNK! {0009}><UNK! {0009}> | 2202 '------------------------------------------------------------------------ 2210 <UNK! {0009}>FOUND=TRUE 2270 <UNK! {0009}>PRINT #2, LEFT$(A$,14);",D";D$;MID$(A$,25) 2280 <UNK! {0009}>PRINT #2, TAB$;TAB$;";";S$(I) 2290 <UNK! {0009}>RETURN 2500 '------------------------------------------------------------------------ 2501 '<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>FCB'S IN THE PCP<UNK! {0009}><UNK! {0009}><UNK! {0009}> | 2502 '------------------------------------------------------------------------ 2590 <UNK! {0009}>RETURN 3000 '------------------------------------------------------------------------ 3001 '<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>GET VARIABLE ADDRESS<UNK! {0009}><UNK! {0009}><UNK! {0009}> | 3002 '------------------------------------------------------------------------ 3010 <UNK! {0009}>BE=INSTR(A$,"["): EN=INSTR(A$,"]"): IF EN-BE<>5 THEN RETURN 3030 <UNK! {0009}>LSET D$=MID$(A$,BE+1,4): IF FNA THEN RETURN 3040 <UNK! {0009}>START=VAL("&H"+D$): IF START<&H100 THEN RETURN 3050 <UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>'Found a variable's address 3060 <UNK! {0009}>FOR I=1 TO L: IF LIN$(I)=D$ THEN 3200 ELSE NEXT<UNK! {0009}>'Check for dups 3100 '------------------------------------------------------------------------ 3101 '<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>GET VARIABLE<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}> | 3102 '------------------------------------------------------------------------ 3110 <UNK! {0009}>L=L+1 <UNK! {0009}><UNK! {0009}><UNK! {0009}>'New variable 3120 <UNK! {0009}>I=START-&H100+1 <UNK! {0009}>'adjust for 100h program prefix 3130 <UNK! {0009}>IF I>LOF(3) THEN L=L-1: RETURN<UNK! {0009}><UNK! {0009}>'don't run past the EOF 3140 <UNK! {0009}> GET #3, I<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>'I'th char of file.COM into N$ 3150 <UNK! {0009}> IF ((ASC(N$)<&HA0) AND (ASC(N$)>&HF)) THEN S$(L)=HEX$(ASC(N$)) ELSE S$(L)="0"+HEX$(ASC(N$)) 3160 <UNK! {0009}> IF I+1>LOF(3) THEN 3200 3170 <UNK! {0009}> GET #3, I+1 3180 <UNK! {0009}> IF ((ASC(N$)<&HA0) AND (ASC(N$)>&HF)) THEN S$(L)=S$(L)+","+HEX$(ASC(N$))+"," ELSE S$(L)=S$(L)+","+"0"+HEX$(ASC(N$)) 3190 <UNK! {0009}>LIN$(L)=D$: I=L 3200 <UNK! {0009}>FOUND=TRUE 3210 <UNK! {0009}>PRINT #2, LEFT$(A$,BE-1);"D";D$;MID$(A$,EN+1);TAB$;";";S$(I) 3290 <UNK! {0009}>RETURN 5000 '------------------------------------------------------------------------ 5001 '|<UNK! {0009}><UNK! {0009}><UNK! {0009}>SEE IF AN ADDRESS IS BEING LOADED <UNK! {0009}><UNK! {0009}> | 5002 '------------------------------------------------------------------------ 5010 <UNK! {0009}>LSET D$=MID$(A$,20,4): IF FNA THEN RETURN 5050 <UNK! {0009}>FOR I=1 TO L: IF LIN$(I)<>D$ THEN NEXT: RETURN 5060 <UNK! {0009}>FOUND=TRUE<UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}><UNK! {0009}>'Found an address! 5080 <UNK! {0009}>PRINT #2, LEFT$(A$,19);"D";D$;MID$(A$,24);TAB$;";";S$(I) 5090 <UNK! {0009}>RETURN 6000 'End of program UASM-STR